// 初始化模块
package aymail

import (
	"errors"
	"gopkg.in/yaml.v2"
	"io/ioutil"
	"log"
)

// 发送者信息
type SenderMsg struct {
	Sender string `yaml:"Sender"` // 发送人
	Alias  string `yaml:"Alias"`  // 发送人别名
	Pass   string `yaml:"Pass"`   // 授权码
	Host   string `yaml:"Host"`   // 所属服务器
	Port   int    `yaml:"Port"`   // 发送端口
}

/**
 * 初始化-读取yaml方式
 * loadPath：加载路径
 * SenderMsg：发送者信息， err：错误信息
 */
func InitMailMsgByYaml(loadPath string) (*SenderMsg, error) {
	// 1.配置文件
	config, err := ioutil.ReadFile(loadPath)
	if err != nil {
		log.Println("[InitMailMsgByYaml] 第一步：读取配置文件信息失败")
		return nil, err
	}

	// 2.初始化结构体，并将yaml信息映射到结构体
	var sdMsg SenderMsg
	err = yaml.Unmarshal(config, &sdMsg)
	if err != nil {
		log.Println("[InitMailMsgByYaml] 第二步：配置文件映射到结构体失败")
		return nil, err
	}

	// 3.打印结构体信息
	log.Println("[InitMailMsgByYaml]", sdMsg)
	return &sdMsg, nil
}

/**
 * 初始化-hardcode方式
 * sender：发送人， alias：发送人别名，  pass：授权码， host：所属服务器， port：发送端口
 * SenderMsg：发送者信息， err：错误信息
 */
func InitMailMsgByHardCode(sender, alias, pass, host string, port int) (*SenderMsg, error) {
	// 1.参数检查
	if sender == "" || alias == "" || pass == "" || host == "" {
		log.Println("[InitMailMsgByHardCode] 发送者信息初始化参数缺失")
		return nil, errors.New("The sender information initialization parameter is missing")
	}

	// 2.返回对象
	return &SenderMsg{
		Sender: sender,
		Alias:  alias,
		Pass:   pass,
		Host:   host,
		Port:   port,
	}, nil
}
